"""
和文件相关的类定义
"""
import json
from typing import List

from 数据分析综合案例.data_define import Record


# 先定义一个抽象类用来做顶层设计，确定有哪些功能需要实现
class FileReader:

    def read_data(self) -> List[Record]:
        """读取文件的数据，读到的每一条数据都转换成Record对象，将他们都封装到list内返回即可"""
        pass


class TextFilereader(FileReader):

    def __init__(self, path):
        self.path = path  # 定义成员变量文件的路径

    # 复写（实现抽象方法）父类的方法
    def read_data(self) -> List[Record]:
        f = open(self.path, "r", encoding="UTF-8")

        record_list: List[Record] = []
        for line in f.readlines():
            line = line.split(",")

            s = line[3].replace("\n", "")

            record = Record(line[0], line[1], int(line[2]), s)
            record_list.append(record)

        f.close()
        return record_list


class JsonFileReader(FileReader):

    def __init__(self, path):
        self.path = path

    def read_data(self) -> List[Record]:
        f = open(self.path, "r", encoding="UTF-8")

        record_list: List[Record] = []
        for line in f.readlines():
            data_dict = json.loads(line)

            record = Record(data_dict["date"], data_dict["order_id"], data_dict["money"], data_dict["province"])
            record_list.append(record)

        f.close()
        return record_list


if __name__ == '__main__':
    text_file_reader = TextFilereader("D:/桌面/非洲马学习资料/第13章资料/2011年1月销售数据.txt")
    json_file_reader = JsonFileReader("D:/桌面/非洲马学习资料/第13章资料/2011年2月销售数据JSON.txt")

    list1 = text_file_reader.read_data()
    list2 = json_file_reader.read_data()

    for l in list1:
        print(l)

    for l in list2:
        print(l)
